home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / scsh-0.4 / scsh-0 / scsh-0.4.2 / scsh / ndbm.scm < prev    next >
Text File  |  1995-10-21  |  4KB  |  117 lines

  1. ;;; Very vanilla DBM processing code
  2.  
  3. ;;; Copyright (c) 1995 by David Albertz (dalbertz@clark.lcs.mit.edu).
  4.  
  5. ;;; This code is freely available for use by anyone for any purpose,
  6. ;;; so long as you don't charge money for it, remove this notice, or
  7. ;;; hold us liable for any results of its use.  --enjoy.
  8.  
  9. ;;; This is just a straight translation of the UNIX freebie NDBM code.
  10.  
  11. ;;; Usage:    (dbm-open name flags mode)
  12. ;;;                 name  := name of database file (no extension)
  13. ;;;                 flags := file access flags (open/create etc.)
  14. ;;;                 mode  := file access modes (privileges)
  15.  
  16. ;;; Return:    Alien value pointer to the open DBM structure
  17.  
  18. ;;; Usage:      (dbm-close db)
  19. ;;;                 db := The pointer returned by dbm-open
  20.  
  21. ;;; Return:     Always returns 0
  22.  
  23. ;;; Usage:      (dbm-fetch db key)
  24. ;;;                 db  := The pointer returned by dbm-open
  25. ;;;                 key := The key value of data to be retrieved
  26.  
  27. ;;; Return:     String containing data associated with key
  28.  
  29. ;;; Usage:      (dbm-store db key data flag)
  30. ;;;                 db   := The pointer returned by dbm-open
  31. ;;;                 key  := The key value to be associated with data
  32. ;;;                 data := The data to be stored with the key
  33. ;;;                 flag := 0 for insert, 1 for replace
  34.  
  35. ;;; Return:     Integer returned by UNIX dbm_store routine
  36.  
  37. ;;; Usage:      (dbm-delete db key)
  38. ;;;                 db  := The pointer returned by dbm-open
  39. ;;;                 key := The key value of data to be deleted
  40.  
  41. ;;; Return:     Integer returned by UNIX dbm_delete routine
  42.  
  43. ;;; Usage:      (dbm-firstkey db)
  44. ;;;                 db   := The pointer returned by dbm-open
  45.  
  46. ;;; Return:     First key value stored in database hash table.
  47.  
  48. ;;; Usage:      (dbm-nextkey db)
  49. ;;;                 db   := The pointer returned by dbm-open
  50.  
  51. ;;; Return:     Next key value stored in database hash table.
  52.  
  53. ;;; Usage:      (dbm-error db)
  54. ;;;                 db   := The pointer returned by dbm-open
  55.  
  56. ;;; Return:     Error number returned by UNIX dbm_error routine
  57.  
  58. ;;; Usage:      (dbm-clearerr db)
  59. ;;;                 db   := The pointer returned by dbm-open
  60.  
  61. ;;; Return:     Clears any database error condition and returns the 
  62. ;;;             integer from the UNIX dbm_clearerr routine
  63.  
  64. ;;; ***NOTE:  All key and data elements must be strings
  65.  
  66. ;;; Scheme48 implementation.
  67.  
  68. (foreign-source
  69.   "#include <ndbm.h>"
  70.   ""
  71.   "extern int errno;"
  72.   ""
  73.   "#define errno_or_false(x) (((x) == -1) ? ENTER_FIXNUM(errno) : SCHFALSE)"
  74.   "" "")
  75.  
  76. (define-foreign %dbm-open (database_open (string file)
  77.                      (integer flags)
  78.                      (integer mode))
  79.   (to-scheme integer errno_or_false) ; error flag
  80.   (C DBM**)) ; DBM structure
  81.  
  82. (define (dbm-open file flags mode)
  83.   (receive (err dbm) (%dbm-open file flags mode)
  84.        (if err
  85.            (errno-error err dbm-open file flags mode)
  86.            dbm)))
  87.  
  88. (define-foreign dbm-close (database_close ((C DBM*) dbm))
  89.   integer);
  90.  
  91. (define-foreign dbm-error (database_error ((C DBM*) dbm))
  92.   integer)
  93.  
  94. (define-foreign dbm-clearerr (database_clearerr ((C DBM*) dbm))
  95.   integer)
  96.  
  97. (define-foreign dbm-delete (database_delete ((C DBM*) dbm)
  98.                         (string key))
  99.   integer)
  100.  
  101. (define-foreign dbm-fetch (database_fetch ((C DBM*) dbm)
  102.                       (string key))
  103.   string)
  104.  
  105. (define-foreign dbm-store (database_store ((C DBM*) dbm)
  106.                       (string key)
  107.                       (string data)
  108.                       (integer flags))
  109.   integer)
  110.  
  111. (define-foreign dbm-firstkey (database_first ((C DBM*) dbm))
  112.   string)
  113.  
  114. (define-foreign dbm-nextkey (database_next ((C DBM*) dbm
  115. ))
  116.   string)
  117.